package com.uh.microservice.core.service;

import com.uh.microservice.core.util.JSONParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.Iterator;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 总体说明 通用的restrpc调用工具类，可在容器中直接使用
 *
 * @author cailm
 * @version $Id: com.innotek.microservice.core.service.RestRpc,v 0.1 2018/6/14 14:50 Exp $$
 */
@Component
public class RestRpc {

    @Autowired
    public RestTemplate restTemplate;

    /**
     *  get方法的调用，
     *  请求路径 和 map 参数
     *  返回字符串
     */
    public String doGetStr(String url,Map param){
        String getParams = "?" + param.keySet().stream().map(k -> String.format("%s={%s}", k, k)).collect(Collectors.joining("&"));
        String rest=restTemplate.getForObject(url+getParams,String.class,param);
        return rest;
    }

    /**
     *  post方法的调用，
     *  请求路径 和 map 参数
     *  返回字符串
     */
    public String doPostStr(String url,Object param){
        String output= JSONParser.obj2Json(param);
        String rest=restTemplate.postForObject(url,output,String.class);
        return rest;
    }

    /**
     *  post方法的调用，
     *  请求路径 和 map 参数
     *  返回字符串
     */
    public String doPostParam(String url,Map param){
        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String,Object>();
    	//Map<String, Object> paramMap = new HashMap<String,Object>();
        Iterator iter=param.keySet().iterator();
        while(iter.hasNext()){
            String key=(String)iter.next();
            paramMap.add(key,param.get(key));
        }
        String rest=restTemplate.postForObject(url, paramMap, String.class);
        return rest;
    }

    /**
     *  get方法的调用，
     *  请求路径 和 map 参数
     *  返回JSON对象
     */
    public Object doGet(String url,Map param){
        String json=doGetStr(url,param);
        return JSONParser.json2Obj(json);
    }

    /**
     *  post方法的调用，
     *  请求路径 和 map 参数
     *  返回JSON对象
     */
    public Object doPost(String utl,Object param){
        String json=doPostStr(utl,param);
        return JSONParser.json2Obj(json);
    }


}
